Cos'è common interface?

Interfacce Comuni (Common Interface)

Un'interfaccia comune, in programmazione orientata agli oggetti, definisce un insieme di metodi che diverse classi possono implementare. Funge da contratto: qualsiasi classe che "implementa" un'interfaccia deve fornire un'implementazione concreta per tutti i metodi definiti in quell'interfaccia.

Benefici dell'utilizzo di interfacce comuni:

  • Polimorfismo: Permettono di trattare oggetti di classi diverse in modo uniforme. Se più classi implementano la stessa interfaccia, è possibile utilizzare un riferimento all'interfaccia per invocare i metodi definiti nell'interfaccia stessa, indipendentemente dalla classe concreta dell'oggetto.

  • Accoppiamento Debole: Le interfacce riducono la dipendenza tra le classi. Una classe dipende dall'interfaccia (un contratto) e non dalle implementazioni concrete. Questo rende il codice più modulare e facile da mantenere. Si può cambiare l'implementazione senza influenzare il codice che usa l'interfaccia.

  • Riutilizzo del Codice: Le interfacce promuovono il riutilizzo del codice attraverso il polimorfismo. Si possono creare metodi che operano su oggetti di qualsiasi classe che implementa una specifica interfaccia.

  • Testabilità: Le interfacce semplificano i test unitari. Si possono creare implementazioni "mock" (finte) delle interfacce per isolare il codice che si sta testando e verificare che interagisca correttamente con le dipendenze.

Esempio Concettuale (Pseudo-codice):

Interfaccia IStampabile {
    metodo stampa()
}

Classe Documento implements IStampabile {
    metodo stampa() {
        // Codice per stampare il documento
    }
}

Classe Immagine implements IStampabile {
    metodo stampa() {
        // Codice per stampare l'immagine
    }
}

funzione elaboraStampa(IStampabile elemento) {
    elemento.stampa() // Esegue la stampa in base al tipo effettivo di elemento
}

// Uso:
Documento doc = new Documento()
Immagine img = new Immagine()

elaboraStampa(doc) // Stampa il documento
elaboraStampa(img) // Stampa l'immagine

In questo esempio, IStampabile è l'interfaccia comune. Sia Documento che Immagine implementano questa interfaccia e forniscono la propria implementazione del metodo stampa(). La funzione elaboraStampa() può accettare qualsiasi oggetto che implementa IStampabile e invocare il metodo stampa() su di esso.